package code1_100.code1_10;

public class Code2 {

}

class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 }

/**
 * 两数相加问题递归求解
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode l = new ListNode();
        return addTwoNumbers(l,l1, l2,0);
    }

    public ListNode addTwoNumbers(ListNode l,ListNode l1, ListNode l2,int tag) {
        if (l1==null&&l2==null)
            if(tag!=0){
                return new ListNode(tag);
            }else {
                return null;
            }
        if( l1==null) {
            int val = l2.val;
            l.val = (val+tag)%10;
            tag =  (val+tag)/10;
            l.next = addTwoNumbers(new ListNode(),null,l2.next,tag);
            return l;
        }
        if (l2==null) {
            int val = l1.val;
            l.val = (val+tag)%10;
            tag =  (val+tag)/10;
            l.next = addTwoNumbers(new ListNode(),l1.next,null,tag);
            return l;

        }

        int val = l1.val+l2.val;
        l.val = (val+tag)%10;
        tag =  (val+tag)/10;
        l.next = addTwoNumbers(new ListNode(),l1.next,l2.next,tag);
        return l;
    }

    public static void main(String[] args) {

    }

}